package main

import (
	"fmt"
	"runtime"
)

/*
1、介绍
为了充分利用多cpu的优势，在go程序中，设置运行的cpu数目
(1)go1.8后，默认让程序运行在多个核上，可以不用设置了
(2)go1.8前，还是要设置一下，可以更高效的利益cpu
*/
/*
runtime包提供和go运行时环境的互操作，如控制go程的函数。它也包括用于reflect包的低层次类型信息
*/
func main() {
	//func NumCPU() int
	//NumCPU返回本地机器的逻辑CPU个数。
	cpuNum := runtime.NumCPU()
	fmt.Println("cpuNum=", cpuNum) //4
	//可以自己设置使用多少个cpu
	//func GOMAXPROCS(n int) int
	//GOMAXPROCS设置可同时执行的最大CPU数，并返回先前的设置。
	//若 n < 1，它就不会更改当前设置。本地机器的逻辑CPU数可通过 NumCPU 查询。本函数在调度程序优化后会去掉。
	before := runtime.GOMAXPROCS(cpuNum - 1)
	before2 := runtime.GOMAXPROCS(cpuNum - 2) //返回的是上一次的设置的cpu数目
	fmt.Println("ok before=", before)         //4
	fmt.Println("ok before2=", before2)       //3
}
